package main

// gorm demo01

import (
	"database/sql"
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"time"
)

// UserInfo --> 数据表
type UserInfo struct {
	ID     uint
	Name   string
	Gender string
	Hobby  string
}

// 定义模型
type User struct {
	gorm.Model   // gorm内置的模型，包含ID，和三个时间
	Name         string
	Age          sql.NullInt64 // 零值类型
	Birthday     *time.Time
	Email        string  `gorm:"type:varchar(100);unique_index"` // 唯一索引
	Role         string  `gorm:"size:255"`                       // 设置字段大小为255
	MemberNumber *string `gorm:"unique;not null"`                // 设置会员号 唯一不为空
	Num          int     `gorm:"AUTO_INCREMENT"`                 // 设置num为自增
	Address      string  `gorm:"index:addr"`                     // 给address字段创建名为addr的索引
	IgnoreMe     int     `gorm:"-"`                              // 忽略本字段
}

// 修改默认表名
func (User) TableName() string {
	return "xinKong"
}

func main() {
	// 连接MySql数据库
	db, err := gorm.Open("mysql", "root:root@(127.0.0.1:3306)/goDb?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 创建表 自动前移 (把结构体和数据表进行对应)

	// 禁用默认表名的复数形式
	db.SingularTable(true)

	db.AutoMigrate(&UserInfo{})
	db.AutoMigrate(&User{})

	// 创建数据行
	u1 := UserInfo{2, "蛋糕", "男", "金钱"}
	db.Create(&u1)
	// 查询表中第一条数据保存到u中
	var u UserInfo
	db.First(&u)
	fmt.Printf("u:%#v\n", u)
	// 更新
	//db.Model(&u).Update("hobby", "双色球")
	// 删除
	//db.Delete(&u)
}
